Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
100.00% |
1 / 1 |
|
100.00% |
3 / 3 |
CRAP | |
100.00% |
26 / 26 |
| AddDefaultPermissionsSubscriber | |
100.00% |
1 / 1 |
|
100.00% |
3 / 3 |
14 | |
100.00% |
26 / 26 |
| __construct | |
100.00% |
1 / 1 |
1 | |
100.00% |
6 / 6 |
|||
| getSubscribedEvents | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| setDefaultPermissions | |
100.00% |
1 / 1 |
12 | |
100.00% |
19 / 19 |
|||
| <?php | |
| declare(strict_types=1); | |
| /* | |
| * This file is part of the Akeneo PIM Enterprise Edition. | |
| * | |
| * (c) 2017 Akeneo SAS (http://www.akeneo.com) | |
| * | |
| * For the full copyright and license information, please view the LICENSE | |
| * file that was distributed with this source code. | |
| */ | |
| namespace Akeneo\Pim\Permission\Bundle\EventSubscriber; | |
| use Akeneo\Asset\Component\Model\CategoryInterface as ProductAssetCategoryInterface; | |
| use Akeneo\Pim\Enrichment\Component\Category\Model\CategoryInterface; | |
| use Akeneo\Pim\Permission\Bundle\Manager\AttributeGroupAccessManager; | |
| use Akeneo\Pim\Permission\Bundle\Manager\CategoryAccessManager; | |
| use Akeneo\Pim\Permission\Bundle\Manager\JobProfileAccessManager; | |
| use Akeneo\Pim\Permission\Component\Attributes; | |
| use Akeneo\Pim\Structure\Component\Model\AttributeGroupInterface; | |
| use Akeneo\Tool\Component\Batch\Model\JobInstance; | |
| use Akeneo\Tool\Component\StorageUtils\StorageEvents; | |
| use Akeneo\UserManagement\Bundle\Doctrine\ORM\Repository\GroupRepository; | |
| use Symfony\Component\EventDispatcher\EventSubscriberInterface; | |
| use Symfony\Component\EventDispatcher\GenericEvent; | |
| /** | |
| * Subscriber responsible for setting default permissions on creation for attribute groups, job instances, | |
| * product categories and product asset categories. | |
| * | |
| * @author Yohan Blain <yohan.blain@akeneo.com> | |
| */ | |
| class AddDefaultPermissionsSubscriber implements EventSubscriberInterface | |
| { | |
| /** @var GroupRepository */ | |
| private $groupRepository; | |
| /** @var AttributeGroupAccessManager */ | |
| private $attributeGroupAccessManager; | |
| /** @var JobProfileAccessManager */ | |
| private $jobInstanceAccessManager; | |
| /** @var CategoryAccessManager */ | |
| private $productCategoryAccessManager; | |
| /** @var CategoryAccessManager */ | |
| private $productAssetCategoryAccessManager; | |
| /** | |
| * @param GroupRepository $groupRepository | |
| * @param AttributeGroupAccessManager $attributeGroupAccessManager | |
| * @param JobProfileAccessManager $jobInstanceAccessManager | |
| * @param CategoryAccessManager $productCategoryAccessManager | |
| * @param CategoryAccessManager $productAssetCategoryAccessManager | |
| */ | |
| public function __construct( | |
| GroupRepository $groupRepository, | |
| AttributeGroupAccessManager $attributeGroupAccessManager, | |
| JobProfileAccessManager $jobInstanceAccessManager, | |
| CategoryAccessManager $productCategoryAccessManager, | |
| CategoryAccessManager $productAssetCategoryAccessManager | |
| ) { | |
| $this->groupRepository = $groupRepository; | |
| $this->attributeGroupAccessManager = $attributeGroupAccessManager; | |
| $this->jobInstanceAccessManager = $jobInstanceAccessManager; | |
| $this->productCategoryAccessManager = $productCategoryAccessManager; | |
| $this->productAssetCategoryAccessManager = $productAssetCategoryAccessManager; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public static function getSubscribedEvents(): array | |
| { | |
| return [ | |
| StorageEvents::POST_SAVE => 'setDefaultPermissions' | |
| ]; | |
| } | |
| /** | |
| * Set the default permissions to the new job instance. | |
| * | |
| * @param GenericEvent $event | |
| */ | |
| public function setDefaultPermissions(GenericEvent $event): void | |
| { | |
| if (!$event->hasArgument('is_new') || !$event->getArgument('is_new')) { | |
| return; | |
| } | |
| if ($event->hasArgument('is_installation') && $event->getArgument('is_installation')) { | |
| return; | |
| } | |
| $subject = $event->getSubject(); | |
| $defaultGroup = $this->groupRepository->getDefaultUserGroup(); | |
| if (null === $defaultGroup) { | |
| return; | |
| } | |
| if ($subject instanceof AttributeGroupInterface) { | |
| $this->attributeGroupAccessManager->setAccess($subject, [$defaultGroup], [$defaultGroup]); | |
| } elseif ($subject instanceof JobInstance) { | |
| $this->jobInstanceAccessManager->setAccess($subject, [$defaultGroup], [$defaultGroup]); | |
| } elseif ($subject instanceof CategoryInterface && $subject->isRoot()) { | |
| $this->productCategoryAccessManager->grantAccess($subject, $defaultGroup, Attributes::OWN_PRODUCTS); | |
| } elseif ($subject instanceof CategoryInterface) { | |
| $this->productCategoryAccessManager->setAccessLikeParent($subject, ['owner' => true]); | |
| } elseif ($subject instanceof ProductAssetCategoryInterface) { | |
| $this->productAssetCategoryAccessManager->setAccessLikeParent($subject, ['owner' => false]); | |
| } | |
| } | |
| } |